#ifndef __PID_H
#define __PID_H

typedef struct {

	/* 控制器增益 */
	float Kp;
	float Ki;
	float Kd;

	/* 微分低通滤波器时间常数 */
	float tau;

	/* 输出限制 */
	float limMin;
	float limMax;
	
	/* 积分器限制 */
	float limMinInt;
	float limMaxInt;

	/* 采样间隔时间（秒），微分低通滤波器使用 */
	float T;

	/* 控制器“内存” */
	float integrator;           /* 积分 */
	float prevError;			/* 前一个误差 */
	float differentiator;       /* 导数（微分） */
	float prevMeasurement;		/* 前一个测量值 */

	/* 控制器输出 */
	float out;

} PIDController;

void  PIDController_Init(PIDController *pid);
float PIDController_Update(PIDController *pid, float setpoint, float measurement);

#endif
